#include <stdio.h>
/*
 * 解法概述
 *
 * 尝试将一个字符串移动成回文对称的形式，并在此过程中记录需要进行的交换操作的数量。
 * 需要注意两种情况判断：如果字符串长度为偶数，此时字符串两边应该完全对称；
 * 如果字符串长度是奇数，则中间有一个字符，然后另外两端对称。
 *
 */
int main() {
  int n, i, j, k, m, flag = 0, sum = 0, b[26] = {0};
  scanf("%d", &n);
  getchar();
  char a[n + 1];
  gets(a);
  j = n - 1;
  // i下标从头到尾遍历字符串
  for (i = 0; i < j; i++) {
    // k下标尝试将字符串的另一端搞成对称的形式
    for (k = j; k >= i; k--) {
      if (i == k) {
        // 区分字符串长度的奇偶两种情况
        if (n % 2 == 0) {
          printf("Impossible");
          return 0;
        } else {
          if (flag) {
            printf("Impossible");
            return 0;
          }
        }
        sum += n / 2 - i;
        flag = 1;
        // printf("iter %d, i == k, flag=%d, a = %s\n", i, flag, a);
        break;
      }
      if (a[i] == a[k]) {
        for (m = k; m < j; m++) {
          a[m] = a[m + 1];
          sum++;
        }
        a[j] = a[i];
        j--;
        break;
      }
    }
    // printf("iter %d, a = %s, sum=%d\n", i, a, sum);
  }
  printf("%d", sum);
  return 0;
}
